#include <sys/kernel.h>
#include <sys/types.h>
#include "multiboot.h"
#include <physical_mm.h>
#include <debug.h>

/* TODO it should not be here */
#include <page_manager.h>  

extern "C" void start(multiboot_info_t* mbi);

extern ulong_t kernel_end;
extern ulong_t kernel_start;

void start(multiboot_info_t* mbi) {
	/* Que tal uma entidade(estatica) para segurar informações
	 * sobre o sistema, tal como memoria, localização do kernel
	 * e etc.
	 */
	int memsize = (mbi->mem_upper + 1024)*1024; // memory size in Bytes
	PageManager::initPaging(memsize, (uint_t)&kernel_start, (uint_t)&kernel_end);
	// init physical memory manager
//	Kernel* kn = Kernel::getInstance();
//	
//	kn->start();
//	
//
//	kn->kprintf("Kernel start: 0x%x\n", &kernel_start);
//	kn->kprintf("Kernel end: 0x%x\n", &kernel_end);
//	
//	kn->panic();
	Debug::dprint("end main!");
}
